import request from '@/utils/request'

// 查询版本列表
export function listVersions(query) {
  return request({
    url: '/pond/app/admin/versions',
    method: 'get',
    params: query
  })
}

// 查询版本详细
export function getVersion(id) {
  return request({
    url: '/pond/app/admin/versions/' + id,
    method: 'get'
  })
}

// 新增版本（发布新版本）
export function addVersion(data) {
  return request({
    url: '/pond/app/admin/versions',
    method: 'post',
    data: data
  })
}

// 修改版本
export function updateVersion(data) {
  return request({
    url: '/pond/app/admin/versions',
    method: 'put',
    data: data
  })
}

// 删除版本
export function delVersion(ids) {
  return request({
    url: '/pond/app/admin/versions/' + ids,
    method: 'delete'
  })
}

// 设置最新版本
export function setLatestVersion(id) {
  return request({
    url: '/pond/app/admin/versions/' + id + '/latest',
    method: 'put'
  })
}

// 检查版本更新
export function checkUpdate(data) {
  return request({
    url: '/pond/app/version/check-update',
    method: 'post',
    data: data
  })
}

// 记录更新日志
export function recordUpdateLog(data) {
  return request({
    url: '/pond/app/version/update-log',
    method: 'post',
    data: data
  })
}

// 获取最新版本信息（前端模拟实现）
export function getLatestVersion() {
  // 由于后端没有此接口，前端通过获取版本列表来模拟
  return listVersions({ isLatest: 1, pageNum: 1, pageSize: 1 })
}

// 上传APK文件（前端模拟实现，实际应该通过文件上传组件处理）
export function uploadApk(data) {
  // 由于后端没有专门的上传接口，这里返回一个模拟的成功响应
  return Promise.resolve({
    code: 200,
    msg: '上传成功',
    data: {
      fileName: data.get('file')?.name || 'app.apk',
      url: '/uploads/' + Date.now() + '.apk'
    }
  })
}

// 获取下一个版本信息（前端智能生成）
export function getNextVersionInfo() {
  // 先获取最新版本信息，然后生成下一个版本
  return listVersions({ pageNum: 1, pageSize: 1 }).then(response => {
    const currentTime = Date.now()
    let nextVersionName = '1.0.1' // 默认版本名称
    
    // 如果有现有版本，基于最新版本生成下一个版本名称
    if (response.rows && response.rows.length > 0) {
      const latestVersion = response.rows[0]
      const currentVersionName = latestVersion.versionName || '1.0.0'
      
      // 解析版本号并递增
      const versionParts = currentVersionName.split('.')
      if (versionParts.length >= 3) {
        // 主版本.次版本.修订版本格式
        const major = parseInt(versionParts[0]) || 1
        const minor = parseInt(versionParts[1]) || 0
        let patch = parseInt(versionParts[2]) || 0
        patch += 1
        nextVersionName = `${major}.${minor}.${patch}`
      } else if (versionParts.length === 2) {
        // 主版本.次版本格式
        const major = parseInt(versionParts[0]) || 1
        let minor = parseInt(versionParts[1]) || 0
        minor += 1
        nextVersionName = `${major}.${minor}.0`
      } else {
        // 单一版本号格式
        const version = parseInt(versionParts[0]) || 1
        nextVersionName = `${version + 1}.0.0`
      }
    }
    
    // 生成格式化的版本号 YYYY.MM.DD.HHMM
    const now = new Date(currentTime);
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0');
    const day = String(now.getDate()).padStart(2, '0');
    const hour = String(now.getHours()).padStart(2, '0');
    const minute = String(now.getMinutes()).padStart(2, '0');
    const formattedVersionCode = `${year}.${month}.${day}.${hour}${minute}`;
    
    return {
      code: 200,
      msg: '操作成功',
      data: {
        versionCode: formattedVersionCode, // 格式化的版本号
        versionName: nextVersionName, // 基于最新版本+1生成
        buildNumber: Math.floor(currentTime / 1000) // 使用时间戳的秒数作为构建号
      }
    }
  }).catch(error => {
    // 如果获取版本列表失败，返回默认值
    const currentTime = Date.now()
    // 生成格式化的版本号 YYYY.MM.DD.HHMM
    const now = new Date(currentTime);
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0');
    const day = String(now.getDate()).padStart(2, '0');
    const hour = String(now.getHours()).padStart(2, '0');
    const minute = String(now.getMinutes()).padStart(2, '0');
    const formattedVersionCode = `${year}.${month}.${day}.${hour}${minute}`;
    
    return {
      code: 200,
      msg: '操作成功',
      data: {
        versionCode: formattedVersionCode,
        versionName: '1.0.1',
        buildNumber: Math.floor(currentTime / 1000)
      }
    }
  })
}